package com.pm.project.service;

import com.alibaba.fastjson2.JSONObject;
import com.pm.common.core.domain.AjaxResult;
import com.pm.common.core.domain.entity.ProjectListNodeMember;
import com.pm.project.domain.ProjectList;
import com.pm.project.domain.ProjectListNode;
import com.pm.project.domain.ProjectModifyRecord;
import com.pm.project.domain.ProjectModifyRecordDetail;
import com.pm.project.domain.vo.ProjectListMemberVO;
import com.pm.project.domain.vo.ProjectListVO;

import java.util.List;

public interface ProjectListService {

    List<ProjectListVO> list(ProjectList projectList);

    AjaxResult add(ProjectList projectList);

    AjaxResult modify(ProjectList projectList);

    AjaxResult detail(String projectListId);

    AjaxResult delete(ProjectList projectList);

    AjaxResult stop(ProjectList projectList);

    AjaxResult draft(ProjectList projectList);

    AjaxResult getSetupDetail(Long projectListId);

    AjaxResult saveSetUp(JSONObject param);

    List<ProjectListVO> setupList(ProjectList projectList);

    AjaxResult saveSettimeMember(JSONObject param);

    JSONObject queryMilestone(ProjectList projectList);

    JSONObject queryProgress(ProjectList projectList);

    void calculateTaskOverdue();

    void calculateProjectOverdue();

    AjaxResult totalProjectForUser(Integer userFlag);

    List<ProjectListVO> queryProjectListNoBug(ProjectList projectList);

    AjaxResult queryTaskIndex(Long projectListNodeMemberId);

    AjaxResult modifyProject(ProjectModifyRecord projectList) throws Exception;

    List<ProjectModifyRecord> queryProjectModifyRecord(ProjectList projectList);

    List<ProjectModifyRecordDetail> queryProjectModifyRecordDetail(ProjectModifyRecord projectModifyRecord);

    AjaxResult updateModifyProject(ProjectModifyRecord projectModifyRecord) throws Exception;

    List<ProjectModifyRecordDetail> queryProjectModifyRecordForDetail(ProjectModifyRecord projectModifyRecord);

    List<JSONObject> queryDiscardProcess(List<ProjectModifyRecord> list);

    List<JSONObject> listLog(Long projectList);

    void notice();

    void emailNotice();

    AjaxResult modifyTaskUser(ProjectListNodeMember projectListNodeMember);

    AjaxResult saveSettimeMemberDraft(JSONObject param);

    AjaxResult getSetupDetailDraft(Long projectListId);

    AjaxResult rejectSetUp(JSONObject param);

    AjaxResult rejectProject(JSONObject param);

    AjaxResult getSetup(Long projectListId);

    AjaxResult restart(ProjectList projectList);

    AjaxResult deleteNode(ProjectListNode projectListNode);

    AjaxResult addProjectMember(ProjectListMemberVO projectListMemberVO);

    AjaxResult replaceProjectMember(ProjectListMemberVO projectListMemberVO);

    void sysProcess();
}
